home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / bricon / source / main.asm < prev    next >
Assembly Source File  |  1991-10-18  |  7KB  |  420 lines

  1.         .286
  2. _TEXT        SEGMENT  WORD PUBLIC 'CODE'
  3. _TEXT        ENDS
  4. _DATA        SEGMENT  WORD PUBLIC 'DATA'
  5. _DATA        ENDS
  6. CONST        SEGMENT  WORD PUBLIC 'CONST'
  7. CONST        ENDS
  8. _BSS        SEGMENT  WORD PUBLIC 'BSS'
  9. _BSS        ENDS
  10. _INST        SEGMENT  WORD PUBLIC 'INST'
  11. _INST        ENDS
  12.  
  13. DGROUP        GROUP    _TEXT, CONST, _BSS, _DATA, _INST
  14.  
  15. extrn        _setbios:near
  16. extrn        _resetbios:near
  17. extrn        His_init:near
  18. extrn        His_end:near
  19. extrn        _VDB_00:near
  20. extrn        _cflush:near
  21. extrn        swap_save:near
  22. extrn        swap_load:near
  23. extrn        move_proc:near
  24. ;extrn       oak_set:near
  25. ;extrn       oak_reset:near
  26.  
  27. _DATA        segment
  28.  
  29. Exe_Param    dw    ?            ; Envp Seg    +0
  30.         dw    ?            ; para offset    +2
  31.         dw    ?            ;      seg    +4
  32.         dw    offset DGROUP:Exe_fcb1    ; FCB1 offset    +6
  33.         dw    ?            ;      seg    +8
  34.         dw    offset DGROUP:Exe_fcb2    ; FCB2 offset    +10
  35.         dw    ?            ;      seg    +12
  36.  
  37. Exe_fcb1    db    16 dup (0)
  38. Exe_fcb2    db    16 dup (0)
  39.  
  40. Command        db    'C:\COMMAND.COM'
  41.         db    128 dup (0)
  42. Def_Param    db    0,0Dh
  43.  
  44. _DATA        ends
  45.  
  46. _TEXT        segment
  47.         ASSUME CS: DGROUP, DS: DGROUP, ES: DGROUP
  48.  
  49.         org    02ch
  50. EnvSeg        label    word
  51.  
  52.         org    080h
  53. CmdsLine    label    word
  54.  
  55.         org    100h
  56. entry:        jmp    main
  57.  
  58. _TEXT        ends
  59.  
  60. _INST        segment
  61.         ASSUME CS: DGROUP, DS: DGROUP, ES: DGROUP
  62.  
  63. main        proc    near
  64.         mov    ax,cs
  65.         mov    ds,ax
  66.         mov    es,ax
  67.         cld
  68.  
  69.         mov    sp,offset DGROUP:Local_Stack
  70.  
  71.         mov    ax,cs
  72.         mov    es,ax
  73.         mov    bx,offset DGROUP:End_of_Prog
  74.         add    bx,15
  75.         shr    bx,4
  76.         mov    ah,4Ah
  77.         int    21h
  78.  
  79.         call    move_proc
  80.  
  81.         call    Screen_init
  82.         call    _setbios
  83. ;        call    oak_set
  84.         call    His_init
  85.         call    Path_init
  86.         call    PF_key_init
  87.         call    swap_save
  88.  
  89.         mov    di,offset DGROUP:Exe_Param
  90.         mov    ax,EnvSeg
  91.         mov    [di+0],ax
  92.  
  93.         mov    ax,ds
  94.         mov    [di+4],ax
  95.         mov    [di+8],ax
  96.         mov    [di+12],ax
  97.  
  98.         mov    si,offset DGROUP:CmdsLine
  99.         lodsb
  100.         cmp    al,0
  101.         je    Def_Fork
  102.         mov    ah,al
  103.  
  104. main_1:        cmp    ah,0
  105.         je    Def_Fork
  106.         dec    ah
  107.         lodsb
  108.         cmp    al,0Dh
  109.         je    Def_Fork
  110.         cmp    al,' '
  111.         je    main_1
  112.         cmp    al,09h
  113.         je    main_1
  114.  
  115.         mov    bx,offset DGROUP:Command
  116.         jmp    main_5
  117.  
  118. main_2:        cmp    ah,0
  119.         je    main_4
  120.         dec    ah
  121.         lodsb
  122.         cmp    al,0Dh
  123.         je    main_4
  124.         cmp    al,' '
  125.         je    main_3
  126.         cmp    al,09h
  127.         je    main_3
  128. main_5:        mov    [bx],al
  129.         inc    bx
  130.         jmp    short main_2
  131.  
  132. main_3:        dec    si
  133.         mov    [si],ah
  134.         mov    [di+2],si
  135.         mov    byte ptr [bx],0
  136.         jmp    short Com_Fork
  137.  
  138. main_4:        mov    byte ptr [bx],0
  139. Def_Fork:    mov    word ptr [di+2],offset DGROUP:Def_Param
  140.  
  141. Com_Fork:    push    ds
  142.         pop    es
  143.         mov    si,[di+2]
  144.         mov    di,offset DGROUP:Exe_fcb1
  145.         mov    ax,2901h
  146.         int    21h
  147.         mov    di,offset DGROUP:Exe_fcb2
  148.         mov    ax,2901h
  149.         int    21h
  150.  
  151.         mov    dx,offset DGROUP:Command
  152.         mov    bx,offset DGROUP:Exe_Param
  153.         mov    ax,4B00h
  154.         int    21h
  155.  
  156.         call    swap_load
  157.         call    His_end
  158.         call    _resetbios
  159. ;        call    oak_reset
  160.  
  161.         mov    ax,4C00h        ; End of Oricon
  162.         int    21h
  163.  
  164. main        endp
  165.  
  166. Pal_Tbl        db    000h,000h,000h
  167.         db    0B0h,000h,000h
  168.         db    000h,0B0h,000h
  169.         db    0B0h,0B0h,000h
  170.         db    000h,000h,0B0h
  171.         db    0B0h,000h,0B0h
  172.         db    000h,0B0h,0B0h
  173.         db    0B0h,0B0h,0B0h
  174.         db    0B0h,0B0h,0B0h
  175.         db    0F0h,000h,000h
  176.         db    000h,0F0h,000h
  177.         db    0F0h,0F0h,000h
  178.         db    000h,000h,0F0h
  179.         db    0F0h,000h,0F0h
  180.         db    000h,0F0h,0F0h
  181.         db    0F0h,0F0h,0F0h
  182.  
  183. CRT_Reg_Tbl    dw    0040h,0320h,0000h,0000h
  184.         dw    035Fh,0000h,0010h,0000h
  185.         dw    036Fh,009Ch,031Ch,009Ch
  186.         dw    031Ch,0040h,0360h,0040h
  187.         dw    0360h,0000h,009Ch,0000h
  188.         dw    0050h,0000h,009Ch,0000h
  189.         dw    0050h,004Ah,0001h,0000h
  190.         dw    003Fh,0003h,0000h,0150h
  191.  
  192. Palet_init    proc    near
  193.         sub    cl,cl
  194.         mov    si,offset DGROUP:Pal_Tbl
  195. Pal_init_1:    mov    al,cl
  196.         mov    dx,0FD90h
  197.         out    dx,al
  198.         lodsb
  199.         mov    dx,0FD92h
  200.         out    dx,al
  201.         lodsb
  202.         mov    dx,0FD94h
  203.         out    dx,al
  204.         lodsb
  205.         mov    dx,0FD96h
  206.         out    dx,al
  207.         inc    cl
  208.         cmp    cl,16
  209.         jb    Pal_init_1
  210.         ret    
  211. Palet_init    endp
  212.  
  213. ;
  214. ; SI = Data Address
  215. ;
  216. CRTC_set    proc    near
  217.         sub    cl,cl
  218. CRTC_set_1:    mov    al,cl
  219.         mov    dx,0440h
  220.         out    dx, al
  221.         lodsw
  222.         mov    dx,0442h
  223.         out    dx, ax
  224.         inc    cl
  225.         cmp    cl,32
  226.         jb    CRTC_set_1
  227.         ret    
  228. CRTC_set    endp
  229.  
  230. ;
  231. ; AL = Val
  232. ;
  233. CRTC_onoff    proc    near
  234.         push    ax
  235.         mov    al,01Ch
  236.         mov    dx,0440h
  237.         out    dx,al
  238.         pop    ax
  239.         mov    dx,0443h
  240.         out    dx,al
  241.         ret
  242. CRTC_onoff    endp
  243.  
  244. ;
  245. ; SI = Data Address
  246. ;
  247. CRTC_init    proc    near
  248.         mov    al,0
  249.         call    CRTC_onoff
  250.         call    CRTC_set
  251.         mov    al,byte ptr [CRT_Reg_Tbl+01Ch*2]
  252.         or    al,80h
  253.         call    CRTC_onoff
  254.         ret
  255. CRTC_init    endp
  256.  
  257. ;
  258. ; AX = Val
  259. ;
  260. Video_init    proc    near
  261.         push    ax
  262.         mov    al,0
  263.         mov    dx,0448h
  264.         out    dx,al
  265.         pop    ax
  266.         mov    dx,044Ah
  267.         out    dx,al
  268.  
  269.         mov    al,1
  270.         mov    dx,0448h
  271.         out    dx,al
  272.         mov    al,ah
  273.         mov    dx,044Ah
  274.         out    dx,al
  275.         ret
  276. Video_init    endp
  277.  
  278. Screen_init    proc    near
  279.  
  280.         mov    al,0
  281.         mov    dx,0FDA0h
  282.         out    dx,al
  283.  
  284.         mov    si,offset DGROUP:CRT_Reg_Tbl
  285.         call    CRTC_init
  286.  
  287.         mov    ax,0815h
  288.         call    Video_init
  289.  
  290.         call    Palet_init
  291.         call    _VDB_00
  292.         call    _cflush
  293.  
  294.         mov    al,0Fh
  295.         mov    dx,0FDA0h
  296.         out    dx,al
  297.         ret
  298. Screen_init    endp
  299.  
  300. pf_key_tbl    db    01h,80h, 2,1Bh,'S'    ;PF1
  301.         db    02h,80h, 2,1Bh,'T'    ;PF2
  302.         db    03h,80h, 2,1Bh,'U'    ;PF3
  303.         db    04h,80h, 2,1Bh,'V'    ;PF4
  304.         db    05h,80h, 2,1Bh,'W'    ;PF5
  305.         db    06h,80h, 2,1Bh,'E'    ;PF6
  306.         db    07h,80h, 2,1Bh,'J'    ;PF7
  307.         db    08h,80h, 2,1Bh,'P'    ;PF8
  308.         db    09h,80h, 2,1Bh,'Q'    ;PF9
  309.         db    0ah,80h, 2,1Bh,'Z'    ;PF10
  310.  
  311.         db    0bh,80h, 2,1Bh,'S'    ;PF11
  312.         db    1dh,80h, 2,1Bh,'T'    ;PF12
  313.         db    21h,80h, 2,1Bh,'U'    ;PF13
  314.         db    22h,80h, 2,1Bh,'V'    ;PF14
  315.         db    23h,80h, 2,1Bh,'W'    ;PF15
  316.         db    24h,80h, 2,1Bh,'E'    ;PF16
  317.         db    25h,80h, 2,1Bh,'J'    ;PF17
  318.         db    26h,80h, 2,1Bh,'P'    ;PF18
  319.         db    27h,80h, 2,1Bh,'Q'    ;PF19
  320.         db    28h,80h, 2,1Bh,'Z'    ;PF20
  321.  
  322.         db    12h,00h, 2,1Bh,'P'    ;[INS]
  323.         db    7fh,00h, 2,1Bh,'V'    ;[DEL]
  324.         db    18h,80h, 0        ;[半角/全角]
  325.         db    1ch,80h, 0        ;[かな漢字]
  326.         db    0,0
  327.  
  328. Start_msg    db    'FM-Towns FMR50 コンソ-ルシュミレ-タ v1.09'
  329.         db    0Dh,0Ah
  330.         db    'Programmed by K.MIYAZAKI'
  331.         db    0Dh,0Ah
  332.         db    'Asistant programmer N.YAMAZAKI'
  333.         db    0Dh,0Ah
  334. ;        db    0Dh,0Ah
  335. ;        db    'FM-Towns OAK/2 フロントエンドプロセッサー v1.04a'
  336. ;        db    0Dh,0Ah
  337. ;        db    'Programmed by N.YAMAZAKI'
  338. ;        db    0Dh,0Ah
  339. ;        db    'Investigated by K.MIYAZAKI Thanks a lot.'
  340. ;        db    0Dh,0Ah
  341.         db    '$'
  342.  
  343. PF_key_init    proc    near
  344.         mov    di,offset DGROUP:pf_key_tbl
  345.         xor    cx,cx
  346. key_set:    mov    dx,word ptr [di]
  347.         cmp    dx,0
  348.         je    key_st_e
  349.         add    di,2
  350.         mov    cl,[di]
  351.         inc    di
  352.         mov    ax,0E00h
  353.         int    90h
  354.         add    di,cx
  355.         jmp    key_set
  356.  
  357. key_st_e:    mov    dx,offset DGROUP:Start_Msg
  358.         mov    ah,09h
  359.         int    21h
  360.         ret
  361. PF_key_init    endp
  362.  
  363. extrn        _path_top:near
  364.  
  365. Path_init    proc    near
  366.         ASSUME DS: nothing, ES: DGROUP
  367.  
  368.         push    ds
  369.         push    es
  370.  
  371.         mov    ax,ds
  372.         mov    es,ax
  373.  
  374.         mov    ds,es:[EnvSeg]
  375.         mov    si,0
  376.         mov    di,offset DGROUP:_path_top
  377.  
  378. _Path_1:    cmp    byte ptr ds:[si],0
  379.         je    _Path_4
  380.  
  381.         mov    ax,ds:[si]
  382.         and    ax,0DFDFh
  383.         cmp    ax,'A'*256+'P'
  384.         jne    _Path_3
  385.         mov    ax,ds:[si+2]
  386.         and    ax,0DFDFh
  387.         cmp    ax,'H'*256+'T'
  388.         jne    _Path_3
  389.         cmp    byte ptr ds:[si+4],'='
  390.         jne    _Path_3
  391.  
  392.         add    si,5
  393. _Path_2:    cmp    byte ptr ds:[si],0
  394.         je    _Path_4
  395.         cmp    di,offset DGROUP:_path_top+127
  396.         jnb    _Path_4
  397.         movsb
  398.         jmp    _Path_2
  399.  
  400. _Path_3:    lodsb
  401.         cmp    al,0
  402.         jne    _Path_3
  403.         jmp    _Path_1
  404.  
  405. _Path_4:    mov    byte ptr es:[di],0
  406.         pop    es
  407.         pop    ds
  408.         ret
  409.         ASSUME DS: DGROUP, ES: nothing
  410.  
  411. Path_init    endp
  412.  
  413.         db    256 dup (?)
  414. Local_Stack    label    word
  415.         public    End_of_Prog
  416. End_of_Prog    label    word
  417.  
  418. _INST        ends
  419.         end    entry
  420.